Python使用数据库

sqlchemy 和 flask-SQLAlchemy

flask-sqlalchemy 是针对sqlalchemy进行了一些封装,使得它更适合flask的使用

数据库初始化

  • mysql://root:starcor@127.0.0.1:3306/publish_platform_1_3_0?charset=utf8 在 create_engine 的时候,设置连接数据库使用 utf8的模式
  • 初始化一个表,使用__table_args__,
1
__table_args__ = {'mysql_engine':'InnoDB','mysql_charset': 'utf8'}

flask-sqlalchemy中的relationship方法

主要语法结构是db.relationship("MainMoreMapper", backref="new_role", lazy="dynamic")
这不是实际的数据库字段,而是用户和其动态之间关系的高级视图,因此它不在数据库图表中。对于一对多关系,db.relationship字段通常在“一”的这边定义,并用作访问“多”的便捷方式。因此,如果我有一个用户实例u,表达式u.posts将运行一个数据库查询,返回该用户发表过的所有动态。 db.relationship的第一个参数表示代表关系“多”的类。 backref参数定义了代表“多”的类的实例反向调用“一”的时候的属性名称。这将会为用户动态添加一个属性post.author,调用它将返回给该用户动态的用户实例。 lazy参数定义了这种关系调用的数据库查询是如何执行的

  • 最重要的一点就是可以使用MainMOreMapper的实力对象获取到设置这个关系的表的所有数据
  • 例如A,B两个表,A中有relationship,B中有外键,指向的是A,那么可以通过B的这个外键访问对应的A中的数据

first和first_or_404的用法区别

  • 两者都是数据库对象的查询方法,只不过后者多了一个查询不到就返回404给客户端的操作
  • 返回的404操作会造成浏览器查询不到url的状况,也就是说可以用来判断用户登录时,自己的个人主页,如果用户不存在,那么就直接返回错误的url,url必须是带有用户id字段的参数